#ifndef __TCP_INIT_H__
#define __TCP_INIT_H__

/**
 * @brief 服务端 TCP 初始化
 *
 * @param ip 服务端绑定 IP 地址
 * @param port 服务端绑定端口
 * @return int 初始化结果，成功返回服务器套接字描述符，参数错误返回 SYSTEM_ERR_INVALID_ARGUMENT，网络错误返回 SYSTEM_ERR_NETWORK_FAILURE
 */
int tcp_server_init(const char *ip, const char *port);

// 这个宏只用于错误检查，不会改变控制流，调用者需要自行处理错误返回值
// TCP 初始化错误检查宏
#define TCP_CHECK_SERVER_INIT(ret)                                                                  \
    do                                                                                              \
    {                                                                                               \
        system_error_code_t _ret = (ret);                                                           \
        if (_ret < 0)                                                                               \
        {                                                                                           \
            system_error_code_t _serr = SYSTEM_ERR_NETWORK_FAILURE;                                 \
            if (_ret == SYSTEM_ERR_INVALID_ARGUMENT)                                                \
                _serr = SYSTEM_ERR_INVALID_ARGUMENT;                                                \
            SYSTEM_LOG_ERROR(_serr, "tcp_server_init failed ret=%d ip=%s port=%s", _ret, ip, port); \
        }                                                                                           \
    } while (0)

#endif // __TCP_INIT_H__